package com.dave.common.dao;

import com.dave.common.entity.BaseEntity;
import com.github.pagehelper.Page;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @PageName com.dave.common.dao
 * @Description Dao基础类接口定义
 * @Author 何全裕
 * @Create 2017-07-30 20:41
 * @Version 1.0
 **/
public interface BaseDao<T extends BaseEntity,PK extends Serializable> {
    /**
     * 查询(通过实体类)
     */
    T find(T entity);

    /**
     * 通过id查询
     */
    T findById(PK id);

    /**
     * 通过多个id查询
     */
    List<T> findByIds(List<PK> PK);

    /**
     * 查询列表
     */
    List<T> findList(T entity);

    /**
     * 查询分页列表
     */
    List<T> findByPage(Map<String,Object> params, Page<T> page);

    /**
     * 查询所有记录
     *
     */
    List<T> findAll();

    /**
     * 查询总记录数
     *
     */
    Long findCount();

    /**
     * 查询符合条件的总记录数
     *
     */
    Long findCount(T entity);

    /**
     * 添加
     *
     */
    PK insert(T entity);

    /**
     * 根据ID删除
     *
     */
    PK delete(PK id);

    /**
     * 根据ID集合删除
     *
     */
    PK delete(List<PK> ids);

    /**
     * 删除所有记录
     */
    PK deleteAll();

    /**
     * 更新
     *
     */
    PK update(T entity);

    /**
     * 检查数据是否已经存在
     *
     */
    boolean check(Map<String,Object> params);

    /**
     * 批量插入
     *
     */
    void batchInsert(List<T> entitys);

    /**
     * 批量更新
     *
     */
    void batchUpdate(List<T> entitys);


}
